﻿// -----------------------------------------------------------------------
// <copyright file="FiltrarModel.cs" company="Storytelling">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace Storytelling.Modelos
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Storytelling.Entidades;
    using Storytelling.Utils;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class FiltrarModel<T>
        where T : Entidade
    {
        private T exemplo;
        private bool inativados;
        private Carga<T> carga;
        private IEnumerable<T> colecao;

        public FiltrarModel()
        {
            exemplo = Activator.CreateInstance<T>();
            inativados = true;
            carga = new Carga<T>();
        }

        public T Exemplo
        {
            get { return exemplo; }
        }

        public bool Inativados
        {
            get { return inativados; }
            set 
            {
                if (exemplo is Inativo)
                {
                    inativados = value; 
                }
            }
        }

        public Carga<T> Carga
        {
            get { return carga; }
        }

        public IEnumerable<T> Colecao
        {
            get 
            {
                if (colecao == null)
                {
                    return new T[0];
                }
                return colecao; 
            }
        }

        public IQueryable Resultado
        {
            set 
            {
                if (typeof(T).Equals(typeof(Nomeado)))
                {
                    colecao = value.Cast<Nomeado>().OrderBy(ent => ent.Nome).Cast<T>().ToArray();
                }
                else
                {
                    colecao = value.Cast<T>().ToArray();
                }  
            }
        }
    }
}
